Vous devez activer Javascript pour accéder à ce site
Accueil  / Semaine 3 / Les vues

Les vues

Qu’est-ce qu’une vue ?

Dans le contexte des bases de données, une vue est un terme assez générique qui désigne le résultat d’une requête. En somme, tout résultat dérivé à partir des données originales peut être considéré comme une vue.

Le concept de vue n’est pas limité aux bases de données relationnelles. Par exemple, un résultat prenant la forme d’un document XML peut être considéré comme une vue. Cependant, dans les entrepôts de données, le concept de vue est plus souvent utilisé dans le contexte des bases de données relationnelles. Dans ce cas précis, la vue prend alors souvent la forme d’une table.

Pourquoi des vues ?

Les applications des vues sont nombreuses. Tout d’abord, on peut créer des vues pour des questions de sécurité. Par exemple, si un utilisateur n’a pas les droits d’accès à une table donnée, parce qu’elle comporte des données confidentielles, on pourra créer une vue à partir de cette table et donner à l’utilisateur le droit d’accès seulement à cette vue et non pas à la table originale. La vue ne contiendra alors que les données pertinentes et elle omettra les données confidentielles.

On peut aussi créer des vues pour simplifier le développement logiciel. Ainsi, au lieu de devoir constamment relancer les calculs à partir d’une table originale, on peut créer une vue qui simplifiera nos formules. La vue sert alors de variable intermédiaire.

Finalement, on peut choisir de matérialiser une vue pour des raisons de performance. C’est le type d’application qui nous intéresse ici. Dans ce sens, la vue devient alors une forme d’index : elle sert essentiellement à accélérer les opérations.

Une taxonomie des vues

Une vue peut être matérialisée, c’est-à-dire que les données qu’elle contient sont stockées. Ainsi, la prochaine fois qu’on a besoin du contenu de la vue, il n’est pas nécessaire de retourner aux données originales. Le calcul d’une vue matérialisée peut prendre un certain temps et la vue elle-même occupe de l’espace de stockage.

Si on matérialise la vue, la question de sa mise à jour se pose. Certains systèmes mettent à jour automatiquement les vues lorsque les données originales sont mises à jour. On dit alors qu’on a une vue dynamique. Le résultat net est que la mise à jour des données prend alors plus de temps, mais on n’a pas à se soucier de la cohérence et de l’exactitude des données. Il existe aussi des formes hybrides de mises à jour : par exemple, un entrepôt pourra ne mettre à jour les vues qu’une fois par jour, même si de nouvelles données apparaissent plus fréquemment.

Certaines vues sont temporaires : elles ne vivent que le temps de faire certaines opérations. D’autres, par contre, sont permanentes. Elles font alors partie intégrante de l’entrepôt de données.

La plupart des vues sont immutables dans les entrepôts de données, c’est-à-dire qu’on ne peut pas y saisir de nouvelles données. D’autres vues permettent les changements. Dans ce cas particulier, les modifications doivent se répercuter sur les tables originales.

Un exemple

L’utilisation des vues afin d’améliorer les performances n’a de sens que si l’on a suffisamment de données pour que les requêtes prennent un certain temps. Afin d’illustrer, de manière simpliste, l’utilité des vues, nous allons utiliser un fichier CSV de taille modérée. Enregistrez le fichier suivant sur votre ordinateur (440 Ko) :

Ouvrez l’archive zip et placez le fichier dans un dossier de votre choix. En ligne de commande, allez dans ce dossier et lancez sqllite :

sqlite3 mabase

Créez une table qui servira à accueillir les données provenant du fichier CSV :

create table v (v1 text, v2 text, v3 text);

Puis chargez le fichier CSV dans la table :

.separator ,
.import census3d.txt v

Voici maintenant une requête qui devrait prendre un peu de temps [1] :

select v2, count(*) from v group by v2;

et voici ce que vous devriez obtenir :

Federal government|2925
Local government|7784
Never worked|439
Not in universe|100245
Private|72028
Self-employed-incorporated|3265
Self-employed-not incorporated|8445
State government|4227
Without pay|165
class of worker|1

Vous constaterez que le résultat de cette requête est tout petit (10 lignes). Sans index, votre ordinateur doit traiter la totalité de la table à chaque fois que cette requête est reçue, même si le résultat (tout petit) pourrait être mis en mémoire.

Malheureusement, sqlite ne supporte pas pleinement la création de vues matérialisées dynamiques. Si l’on sait, par contre, que la table v ne changera pas, on peut matérialiser le résultat de la requête sous la forme d’une table :

create table mavue as select v2, count(*) from v group by v2;

Nous utilisons alors peu d’espace disque supplémentaire (peut-être moins d’un Ko) et le résultat de la vue est maintenant disponible très rapidement :

select * from mavue;

On se résume...

 Les vues peuvent être utilisées pour accélérer les bases de données.
 On matérialise de préférence : (1) les données qui sont fréquemment requises (2) dont le volume total est petit (3) dont le calcul est dispendieux.


[1Il ne peut s’agir que d’une fraction de seconde, selon la puissance de votre PC.